package top.gytf.unifiedcall.producer.support.exception;

import top.gytf.unifiedcall.model.exception.BaseException;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 通用调用异常绑定
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExceptionBind {
    /**
     * 状态码的定位描述
     * <p>数组格式用于提供未指定的含义，存在多个值时仅使用第一个
     * @see top.gytf.unifiedcall.model.code.StatusCode
     */
    String[] location() default {};

    /**
     * 绑定到的BaseException
     * <p>数组格式用于提供未指定的含义，存在多个值时仅使用第一个
     */
    Class<? extends BaseException>[] exception() default {};

    /**
     * 默认的异常描述，当exception#message为{@code null}时使用
     */
    String defaultMessage() default "";
}
